import { request } from "./index"
import nprogress from "nprogress"
import store from "@/store"
import "nprogress/nprogress.css"

//请求拦截器
request.interceptors.request.use((config) => {
  nprogress.start() //只要发送了请求就开启进度条
  //获取用户临时身份信息的值,然后随着header的[userTempId]字段发送
  let userTempId = store.state.user.userTempId
  config.headers.userTempId = userTempId

  //请求用户信息时需将用户登录的token放在请求头中发送给后端
  //如果用户登录了,我们需要在header中携带token(用来请求后端数据时进行鉴权操作)
  let token = store.state.user.token
  config.headers.token = token
  return config
})

//响应拦截器
request.interceptors.response.use(
  (response) => {
    // console.log(response.data) //后端返回的数据
    //只要进入响应拦截器就关闭进度条
    nprogress.done()
    //因为请求成功不代表是我们需要的结果(例如登录时，用户输入了用户名和密码，此时相当于请求成功，但是响应拦截器会去校验，如果校验成功，那么response.data.code的值就是200，如果校验失败，说明输入的用户名错误或密码错误，那么就执行else中的代码，返回一个失败的Promise对象),我们需要的结果是后端返回的数据中,code也是200的时候
    if (response.data.code === 200) {
      return response.data.data
    } else {
      //因为所有的错误对象都有一个message的属性,为了方便统一处理,我们抛出错误的时候也把错误包装成一个对象,内部有message属性
      return Promise.reject({ message: response.data.message })
    }
  },
  (error) => {
    nprogress.done()
    return Promise.reject(error)
  }
)

export default request
